#ifndef BLOCKWISE_INTEGRATED_CALCULATE_BLOCKSIZE_HPP
#define BLOCKWISE_INTEGRATED_CALCULATE_BLOCKSIZE_HPP

#include "typeAliases.hpp"
#include "sweSolverTypes_fwd.hpp"

namespace hms::swe
{

namespace block {

double getApproxSize();

Index calculateSize_threshold(
	Index meshsize_dim,
	Index approxSize,
	double threshold
);

Index calculateSize_nextNeighbour( Index meshsize_dim, double approxSize );

}

/**
 * @brief Calculates the full block size.
 * 
 * @param innerMeshSize_dim Mesh size without ghost cells and outer layers
 * @param alg remainder adjustment algorithm
 * @param threshold for threshold-based remainder adjustment algorithm
 * @return Index 
 */
Index calculateBlocksize(
	Index innerMeshSize_dim, RemAdjust alg, double threshold
);

} // namespace hms::swe

#endif